﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Math.h>
////求出0～100000之间的所有“水仙花数”并输出。
//
////“水仙花数”是指一个n位数，其各位数字的n次方之和确好等于该数本身，
//// 如:153＝1 ^ 3＋5 ^ 3＋3 ^ 3，则153是一个“水仙花数”。
//
//void flowernumber()
//{
//	for (int i = 0; i < 99999; i++)
//	{//i=153
//		int count = 0;
//		int tmp = i;
//		while (tmp != 0)
//		{
//			count++;
//			tmp /= 10;
//		}//tmp=0 count=3,三位数
//		tmp = i;
//		int sum = 0;
//		while (tmp!=0)
//		{
//			sum += pow(tmp % 10, count);
//			tmp /= 10;
//		}
//		if (sum == i)
//		{
//			printf("%d\n", i);
//		}
//
//	}
//
//}
//
//int main()
//{
//	flowernumber();
//	return 0;
//}

//求Sn = a + aa + aaa + aaaa + aaaaa的前5项之和，其中a是一个数字，
//
//例如：2 + 22 + 222 + 2222 + 22222

//int work(int i, int b)
//{
//	int sum = 0;
//	int tmp = 0;
//	for (int c = 0; c < b; c++)
//	{
//		tmp = tmp * 10 + i;
//		sum = tmp + sum;
//	}
//	return sum;
//}
//int main()
//{
//	printf("%d", work(2, 5));
//	return 0;
//}

//编写一个函数实现n的k次方，使用递归实现。

//int work(int a, int b)
//{
//	if (b == 1)
//	{
//		return a;
//	}
//	return a * work(a, b - 1);
//}
//
//int main()
//{
//	printf("%d", work(2,3));
//	return 0;
//}


//写一个递归函数DigitSum(n)，输入一个非负整数，返回组成它的数字之和
//
//例如，调用DigitSum(1729)，则应该返回1 + 7 + 2 + 9，它的和是19
//
//输入：1729，输出：19

//int DigitSum(int a)
//{
//	if (a < 10)
//	{
//		return a;
//	}
//
//	return a%10+DigitSum(a/10);
//}
//
//int main()
//{
//	printf("%d", DigitSum(1729));
//	return 0;
//}

//递归和非递归分别实现求n的阶乘（不考虑溢出的问题）

//int work(int a)
//{
//	if (a==1)
//	{
//		return 1;
//	}
//	return a * work(a - 1);
//}
//
//int main()
//{
//	printf("%d", work(5));
//	return 0;
//}

//递归方式实现打印一个整数的每一位

//void Print(int a)
//{
//	if (a < 10)
//	{
//		printf("%d\n", a);
//	}
//	else
//	{
//		Print(a / 10);
//		printf("%d\n", a % 10);
//	}
//
//}
//
//int main()
//{
//	Print(325);
//	return 0;
//}
//int main()
//{
//	int a = 9;
//	int b = 3;
//	int c = a ^ b;
//	printf("%d", c);
//	return 0;
//}
//int main()
//{
//	int a = 12;
//	int b = 5;
//	int c = a & b;
//	printf("%d", c);
//	return 0;
//}

//单身狗1
//
//作业内容
//在一个整型数组中，只有一个数字出现一次，其他数组都是成对出现的，请找出那个只出现一次的数字。
//
//例如：
//
//数组中有：1 2 3 4 5 1 2 3 4，只有5出现一次，其他数字都出现2次，找出5

//int Dog(int arr[], int len)
//{
//	int tep = 0;
//	for (int i = 0; i < len; i++)
//	{
//		tep ^= arr[i];
//
//	}
//	return tep;
//}
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,4,3,2,1 };
//	int len = sizeof(arr) / sizeof arr[0];
//	printf("%d", Dog(arr, len));
//	return 0;
//}
//交换两个变量（不创建临时变量）
//
//作业内容
//不允许创建临时变量，交换两个整数的内容
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d%d",&a,&b);
//	a = a + b;
//	b = a - b;
//	a = a - b;
//	printf("%d %d\n", a, b);
//	return 0;
//}

//编程实现：两个int（32位）整数m和n的二进制表达中，有多少个位(bit)不同？
//
//输入例子 :
//
//1999 2299
//
//输出例子 : 7

//int work(int a, int b)
//{
//	int tmp = a ^ b;
//	int c = 0;
//	while (tmp != 0)
//	{
//		tmp &= (tmp - 1);
//		c++;
//	}
//	return c;
//}
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d%d", &a, &b);
//	
//	printf("%d", work(a, b));
//	return 0;
//}
// 
// \
//打印整数二进制的奇数位和偶数位
//
//作业内容
//获取一个整数二进制序列中所有的偶数位和奇数位，分别打印出二进制序列

//void work(int n)
//{
//	for (int i = 30; i >= 0; i -= 2)
//	{
//		printf("%d", (n >> i) & 1);
//		
//	}printf("\n");
//	for (int i = 31; i >= 1; i -= 2)
//	{
//		printf("%d", (n >> i) & 1);
//		
//	}
//}
//
//int main()
//{
//	int c = 0;
//		scanf("%d", &c);
//	work(c);
//	return 0;
//}


//统计二进制中1的个数
//
//作业内容
//写一个函数返回参数二进制中 1 的个数。
//
//比如： 15    0000 1111    4 个 1

//int main()
//{
//
//	int num = 0;
//	scanf("%d", &num);
//	int i = 0;
//	int count = 0;//计数
//	while (num)
//	{
//		count++;
//		num = num & (num - 1);
//	}
//	printf("%d\n", count);
//	return 0;
//}
//int i;
//int main()
//{
//    i--;
//    if (i > sizeof(i))
//    {
//        printf(">\n");
//    }
//    else
//    {
//        printf("<\n");
//    }
//    return 0;
//}
//
//递归和非递归分别实现求第n个斐波那契数
//
//例如：
//
//输入：5  输出：5
//
//输入：10， 输出：55
//
//输入：2， 输出：1

//int Fib(int n)
//{
//	if (n <=2)
//	{
//		return 1;
//	}
//	else
//		return Fib(n - 1) + Fib(n - 2);
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d",&n);
//	
//	printf("%d", Fib(n));
//	return 0;
//
//}